위메프 카테고리 상품 크롤링 by Selenium

위메프 카테고리 상품 크롤링 by Selenium

대상 카테고리는 패션,뷰티 / 식품,생활,유아동 / 가전,디지털 총 3가지 카테고리이며 아래 url 주소에 각각

을 넣으면 된다. 또한, 마지막의 df.to_excel('df.xlsx', sheet_name='sheet1') 부분의 df.xlsx 은 카테고리별로 다르게 지정해주도록 하자. 실행은 jupyter notebook 으로 하고, Selenium 은 미리 설정이 되어 있어야하니 이전글을 참고하고 시작하자.

정확히 내가 크롤링 하고 싶은 정보인 DataFrame df_1

카테고리 상품 상위 501개 중 오늘오픈 한 상품이자 히든프라이스 상품이 아닌 데이터의 게시 순서상품 이름판매 가격원 가격, ~ & 外 표현이 있는지 여부상품 이름 길이이다.

기준 시간은 2018년 7월 15일 오후 11시 50분 경이다.
혹시 len(items)가 501개 이하로 나온다면 time.sleep(3)에 숫자를 조금 더 크게 바꿔주자.
급하니 일단 코드만…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import pandas as pd
import operator
import numpy as np
import re

url = "http://www.wemakeprice.com/main/100010"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)

last_height = driver.execute_script("return document.body.scrollHeight")

for _ in range(15):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
new_height = driver.execute_script("return document.body.scrollHeight")
last_height = new_height

items = driver.find_elements_by_css_selector(".group_list > .section_list > ul > li")
len(items)

dict_list = []
for item in items:
dict_list.append({
"상품 이름": item.find_element_by_css_selector('.tit_desc').text,
"원 가격": item.find_element_by_css_selector('.prime').text\
.split(" ")[0].replace(",","")[:-1],
"판매 가격": item.find_element_by_css_selector('.sale').text\
.split(" ")[0].replace(",","")[:-1],
"판매량": item.find_element_by_css_selector('.point').text,
"오늘 오픈 여부": item.find_element_by_css_selector('.box_sticker').text,
"~, 外 여부": item.find_element_by_css_selector('.etc').text,
})

df = pd.DataFrame(dict_list, columns=["상품 이름","원 가격","판매 가격","판매량","오늘 오픈 여부", "~, 外 여부"])

df['판매 가격'].replace(regex=True,inplace=True,to_replace='원',value='')
df['원 가격'].replace(regex=True,inplace=True,to_replace='',value=np.NaN)
df['오늘 오픈 여부'].replace(regex=True,inplace=True,to_replace='',value=np.NaN)
df['~, 外 여부'].replace(regex=True,inplace=True,to_replace='',value=np.NaN)

df["상품 이름 길이"] = ''

len_list = []
for i in df["상품 이름"]:
len_list.append(len(i))
df["상품 이름 길이"] = len_list

df.index = df.index + 1

df["게시 순서"] = df.index

df = df[['게시 순서', '판매량', '상품 이름', '판매 가격', '원 가격', '~, 外 여부', '상품 이름 길이', '오늘 오픈 여부']]

df.rename(columns=lambda x : x.replace('원 가격', '원 가격 포함 여부'), inplace=True)

won_list = []
df["원 가격 포함 여부"].fillna(0, inplace=True)
df["~, 外 여부"].fillna(0, inplace=True)
for i in df["원 가격 포함 여부"]:
if i != 0:
won_list.append(1)
else:
won_list.append(0)
df["원 가격 포함 여부"] = won_list

won_list = []
for i in df["~, 外 여부"]:
if i != 0:
won_list.append(1)
else:
won_list.append(0)
df["~, 外 여부"] = won_list

df

df_1 = df.copy()

df_1 = df_1[df_1["오늘 오픈 여부"] == "오늘오픈"]
df_1 = df_1[df_1["판매 가격"] != "0"]
df_1 = df_1.reset_index(drop=True)

df_1

df_1.to_excel('파일이름 원하는대로.xlsx', sheet_name='sheet1')

driver.quit()

한 칸 Enter된 것 마다 다른 셀에 집어넣어서 실행시키면 된다.
패션,뷰티 카테고리 코드 실행 결과는 아래와 같다.

6

생각보다 코드를 빠르게 짜서 나도 놀랐다. 하지만 pandas 명령어가 막히는 비율이 너무 많다. 조금씩 줄여나가자.

자, 이제 위 데이터를 바탕으로 선형 회귀 분석을 하러 가볼까나!